package me.helllp.bootman.common.services;

import java.util.Set;

import me.helllp.bootman.common.bean.LoginUserBean;

public interface LoginUserServices<T extends LoginUserBean> {
	/**
	 * 创建账号
	 * 
	 * @param user
	 * @return
	 */
	public T createUser(T user);
	 
	/**
	 * 修改密码
	 * 
	 * @param userId
	 * @param newPassword
	 */
	public void changePassword(Long userId, String newPassword);  
	
	/**
	 * 登录逻辑
	 * 
	 * @param principals	登录用户身份
	 * @param credentials	登录用户证明
	 * @return
	 */
	public boolean login(String principals, String credentials);
	
	/**
	 * 登出逻辑
	 * 
	 * @param userId	用户标识
	 * @return
	 */
	public boolean logout(Long userId);
	
	/**
	 * 基于唯一用户ID查找角色
	 * 
	 * @param userId	
	 * @return
	 */
	public Set<String> findRoles(Long userId);
	
	/**
	 * 基于唯一用户ID查找许可
	 * 
	 * @param userId
	 * @return
	 */
	public Set<String> findPermissions(Long userId);
	
	/**
	 * 查找用户对象
	 * 
	 * @param userId
	 * @return
	 */
	public T findUserInfo(Long userId);
	
	/**
	 * 添加用户-角色关系
	 * 
	 * @param userId
	 * @param roleIds
	 */
	public void correlationRoles(Long userId, Long... roleIds);  
	
	/**
	 * 移除用户-角色关系
	 * 
	 * @param userId
	 * @param roleIds
	 */
    public void uncorrelationRoles(Long userId, Long... roleIds);
}
